/* Tree 树类型声明 */
// https://elementPlus.gitee.io/zhCN/component/tree.html#属性

interface IElTreeProps {
  label?: string | any // 指定节点标签为节点对象的某个属性值, function(data, node)
  children?: string // 指定子树为节点对象的某个属性值
  disabled?: string | any // 指定节点选择框是否禁用为节点对象的某个属性值, function(data, node)
  isLeaf?: string | any // 指定节点是否为叶子节点，仅在指定了 lazy 属性的情况下生效, function(data, node)
  class?: string | any // 自定义节点类名, function(data, node)
}

export interface IElTree<T> {
  data: T[] // 展示数据
  nodeKey: string // 每个树节点用来作为唯一标识的属性，整棵树应该是唯一的
  props?: IElTreeProps // 配置选项，具体看下表
  emptyText?: string // 内容为空的时候展示的文本
  renderAfterExpand?: boolean // 是否在第一次展开某个树节点后才渲染其子节点 true
  load?: any // 加载子树数据的方法，仅当 lazy 属性为true 时生效	，node为当前点击的节点，resolve为数据加载完成的回调(必须调用) function(node, resolve)
  renderContent?: any // 树节点的内容区的渲染 Function Function(h, { node, data, store })
  highlightCurrent?: boolean // 是否高亮当前选中节点，默认值是 false。
  defaultExpandAll?: boolean // 是否默认展开所有节点 false
  expandOnClickNode?: boolean // 是否在点击节点的时候展开或者收缩节点， 默认值为 true，如果为 false，则只有点箭头图标的时候才会展开或者收缩节点。 true
  checkOnClickNode?: boolean // 是否在点击节点的时候选中节点，默认值为 false，即只有在点击复选框时才会选中节点 false
  autoExpandParent?: boolean // 展开子节点的时候是否自动展开父节点 true
  defaultExpandedKeys?: string[] // 默认展开的节点的 key 的数组
  showCheckbox?: boolean // 节点是否可被选择 false
  checkStrictly?: boolean // 在显示复选框的情况下，是否严格的遵循父子不互相关联的做法，默认为 false
  defaultCheckedKeys?: string[] // 默认勾选的节点的 key 的数组
  currentNodeKey?: string | number // 当前选中的节点
  filterNodeMethod?: any // 对树节点进行筛选时执行的方法， 返回 false 则表示这个节点会被隐藏 Function(value, data, node)		—	—
  accordion?: boolean // 是否每次只打开一个同级树节点展开 false
  indent?: number // 相邻级节点间的水平缩进，单位为像素 16
  icon?: string // 自定义图标组件 string | Component
  lazy?: boolean // 是否懒加载子节点，需与 load 方法结合使用 false
  draggable?: boolean // 是否开启拖拽节点功能 false
  allowDrag?: any // 判断节点能否被拖拽 如果返回 false ，节点不能被拖动 Function(node)
  allowDrop?: any // 拖拽时判定目标节点能否成为拖动目标位置。 如果返回 false ，拖动节点不能被拖放到目标节点。 type 参数有三种情况：'prev'、'inner' 和 'next'，分别表示放置在目标节点前、插入至目标节点和放置在目标节点后	Function(draggingNode, dropNode, type)	—	—
}

export interface ITreeLazyOptions {
  fn: any // 加载数据函数
  id: string // 查询数据的参数名
  level?: number // 懒加载层级
  time?: number // 加载延迟时长
}

export interface ITree<T> extends IElTree<T> {
  lazyOptions?: ITreeLazyOptions
}
